import apiClient from './index'; // 导入配置的 Axios 实例

/**
 * 将图片元素转换为 Blob 对象
 * @param {HTMLImageElement} imgElement - 图片元素
 * @returns {Promise<Blob>} - 返回 Blob 对象
 */
const imageToBlob = (imgElement) => {
  return new Promise((resolve, reject) => {
      // 确保图片已加载
      if (!imgElement.complete || imgElement.naturalWidth === 0) {
          reject(new Error('图片未加载完成'));
          return;
      }

      const canvas = document.createElement('canvas');
      const ctx = canvas.getContext('2d');

      // 设置 Canvas 的宽高与图片一致
      canvas.width = imgElement.naturalWidth;
      canvas.height = imgElement.naturalHeight;

      // 将图片绘制到 Canvas 上
      ctx.drawImage(imgElement, 0, 0);

      // 将 Canvas 转换为 Blob 对象
      canvas.toBlob((blob) => {
          if (blob) {
              resolve(blob);
          } else {
              reject(new Error('图片转换失败'));
          }
      }, 'image/png', 0.9); // 明确指定图片格式和质量
  });
};

  /**
 * 提取图片中的文字
 * @param {HTMLImageElement} imgElement - 图片元素
 * @returns {Promise<string>} - 返回提取的文字
 */
export const extractTextFromImage = async (imgElement) => {
    try {
      // 将图片转换为 Blob 对象
      const blob = await imageToBlob(imgElement);
      // 创建 FormData 对象并添加图片
      const formData = new FormData();
      formData.append('image', blob, '1.png'); // 第三个参数是文件名
    // 发送请求到后端
    const response = await apiClient.post('/geolearning/ocr', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
      // 返回提取的文字
      return response.data;
    } catch (error) {
      console.error('提取文字失败', error);
      throw new Error('提取文字失败');
    }
  };
    /**
 * 提取文字中的实体关键词
 * @param {HTMLImageElement} imgElement - 图片元素
 * @returns {Promise<string>} - 返回提取的文字
 */
export const extractEntityFromImage = async (imgElement) => {
    try {
      // 将图片转换为 Blob 对象
      const blob = await imageToBlob(imgElement);
  
      // 创建 FormData 对象并添加图片
      const formData = new FormData();
      formData.append('image', blob, 'image.png'); // 第三个参数是文件名
  
    // 发送请求到后端
    const response = await apiClient.post('/geolearning/ocr/entity', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
      // 返回提取的文字
      return response.data;
    } catch (error) {
      console.error('提取文字失败', error);
      throw new Error('提取文字失败');
    }
  };

 /**
 * 提取文字中的实体关键词
 * @param {String } keyword - 图片元素
 * @returns {Promise<List<string>>} - 返回提取的文字
 */
export const extractGraphFromImage = async (keyword) => {
  try {
  // 发送请求到后端
  console.log('Sending keyword:', keyword); // 调试信息
  const response = await apiClient.post('/geolearning/ocr/relatedentity',{ keyword }, {
    headers: {
      'Content-Type': 'application/json'
    }
  });
    // 返回提取的文字
    return response.data;
  } catch (error) {
    console.error('提取关联实体失败', error);
    throw new Error('提取关联实体失败');
  }
};
  